export default function unmountNode(node) {
    const virtualDOM = node._virtualDOM
    // 1、文本节点可以直接进行删除
    if(virtualDOM.type === 'text'){
        // 直接删除
        node.remove()
        return
    }

    // 2、节点是否是由组件生成 
    let component = virtualDOM.component
    if(component){
        // 是由组件生成的  则需要调用组件上的「componentWillUnmount」生命周期函数
        component.componentWillUnmount()
    }

    // 3、看一下节点身上是否有ref属性
    if(virtualDOM.props && virtualDOM.props.ref){
        // 清除ref属性透传的相关DOM对象/组件
        virtualDOM.props.ref(null)
    }
    // 4、看一下节点身上是否有事件属性
    Object.keys(virtualDOM.props).forEach((propsName) => {
        if(propsName.slice(0,2) === "on"){
            const eventName = propsName.toLocaleLowerCase().slice(0,2)
            const eventHandler = virtualDOM.props[propsName]
            node.removeEventListener(eventName,eventHandler)
        }
    })
    // 5、节点里面是否还有子节点 然后秭归删除子节点
    if(node.childNodes.length > 0){
        for (let i = 0; i < node.childNodes.length; i++) {
            unmountNode(node.childNodes[i])
            i--
        }
    }

    // 删除节点
    node.remove()
}